﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Aga.Psad.Common;
using Aga.Psad.Mvc.Helpers;


namespace Aga.Psad.Mvc.Models
{
    public class AvisoViewModel
    {
		public AvisoViewModel()
        {
            this.Archivos = new List<ArchivoViewModel>();
        }

        public int Id { get; set; }
        public string TipoAgente { get; set; }
        public string CuitAgente { get; set; }
        public string Legajo { get; set; }
        public string CuitDeclarante { get; set; }
        public string CuitPsad { get; set; }
        public string CuitIE { get; set; }
        public string Codigo { get; set; }
        public DateTime FechaHoraAcept { get; set; }
        public string Ticket { get; set; }
        public DateTime FechaHoraAviso { get; set; }
        public int CodigoError { get; set; }
        public string MensajeError { get; set; }
        public int Estado { get; set; }
        public DateTime? FechaHoraAvisoDigit { get; set; }
        public string Hash { get; set; }
        public List<ArchivoViewModel> Archivos { get; set; }
        public string NombreEstado
        {
            get
            {
                switch (this.Estado)
                {
                    case 0: return "Sin Enviar";
                    case 1: return "Recibido";
                    case 2: return "Digitalizado";
                    default: throw new ArgumentException("El estado es inválido");
                }
            }
        }


        public bool IsValid
        {
            get { return (GetRuleViolations().Count() == 0); }
        }

        public IEnumerable<RuleViolation> GetRuleViolations()
        {
            if (String.IsNullOrEmpty(TipoAgente))
                yield return new RuleViolation("Tipo de Agente requerido", "TipoAgente");
            if (String.IsNullOrEmpty(CuitAgente))
                yield return new RuleViolation("Cuit de Agente requerido", "CuitAgente");
            if (!CuitHelper.ValidaCuit(CuitAgente))
                yield return new RuleViolation("Cuit de Agente inválido", "CuitAgente");
            if (String.IsNullOrEmpty(Legajo))
                yield return new RuleViolation("Numero de Legajo requerido", "Legajo");
            if (String.IsNullOrEmpty(CuitDeclarante))
                yield return new RuleViolation("Cuit Declarante requerido", "CuitDeclarante");
            if (!CuitHelper.ValidaCuit(CuitDeclarante))
                yield return new RuleViolation("Cuit Declarante inválido", "CuitDeclarante");
            if (String.IsNullOrEmpty(CuitPsad))
                yield return new RuleViolation("Cuit Psad requerido", "CuitPsad");
            if (!CuitHelper.ValidaCuit(CuitPsad))
                yield return new RuleViolation("Cuit Psad inválido", "CuitPsad");
            if (String.IsNullOrEmpty(CuitIE))
                yield return new RuleViolation("Cuit Importador/Exportador requerido", "CuitIE");
            if (!CuitHelper.ValidaCuit(CuitIE))
                yield return new RuleViolation("Cuit Importador/Exportador inválido", "CuitIE");
            if (String.IsNullOrEmpty(Codigo))
                yield return new RuleViolation("Codigo requerido", "Codigo");
            //if the code is 001, the ticket is required.
            if (string.Compare(Codigo, "001") == 0 && String.IsNullOrEmpty(Ticket))
                yield return new RuleViolation("Ticket requerido", "Ticket");
            if (!DateTimeValidator.IsValid(FechaHoraAcept))
                yield return new RuleViolation("Fecha invalida", "FechaHoraAcept");

            yield break;
        }

    }
}
